package kr.salebeans.cm.provider.customer;

import java.util.List;

import kr.salebeans.cm.customer.search.CustomerSearchCond;
import kr.salebeans.cm.domain.customer.Customer;

/**
 * @author bizuma
 *
 */
public interface CustomerProvider {

    /**
     *======================================================
     * @method  : CustomerProvider - getCustomer 
     * @author  : bgkang
     * @since   : 2012. 11. 11.
     * @return  : Customer
     * @param customerId
     * @return
     * @note    : 고객아이디로 고객조회
     *======================================================
     */
    public Customer retrieveCustomer(long customerId);

    /**
     *======================================================
     * @method  : CustomerProvider - retrieveCustomerList 
     * @author  : bgkang
     * @since   : 2012. 11. 11.
     * @return  : List<Customer>
     * @param searchCond
     * <li> String shopId : 소속샵아이디 - 필수
     * <li> CustomerSearchType searchType : 조회유형 - 필수
     * <li> String name : 고객명 (%%) - 옵션
     * <li> String gender : 성별(1 : 남자 2: 여자)  - 옵션
     * <li> String phoneNo : 전화번호(집, 핸드폰) - 옵션
     * @return
     * @note    : 고객목록조회
     *======================================================
     */
    public List<Customer> retrieveCustomerList(CustomerSearchCond searchCond);

    /**
     *======================================================
     * @method  : CustomerProvider - retrieveTotalCustomerListCount 
     * @author  : bgkang
     * @since   : 2012. 11. 11.
     * @return  : long
     * @param searchCond
     * @return
     * @note    : 조회조건에 속한 총 고객수조회
     *======================================================
     */
    public long retrieveTotalCustomerListCount(CustomerSearchCond searchCond);

    /**
     *======================================================
     * @method  : CustomerProvider - createCustomer 
     * @author  : bgkang
     * @since   : 2012. 11. 11.
     * @return  : Customer
     * @param customer
     * @return
     * @note    : 고객등록
     *======================================================
     */
    public Customer createCustomer(Customer customer);

    /**
     *======================================================
     * @method  : CustomerProvider - updateCustomer 
     * @author  : bgkang
     * @since   : 2012. 11. 10.
     * @return  : Customer
     * @param customer
     * @return
     * @note    : 고객수정
     * ======================================================
     */
    public Customer updateCustomer(Customer customer);

}
